package com.kyzh.core.utils.appinit

import android.app.Activity
import android.app.Application
import android.content.Context
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.os.Build
import android.util.Log
import cn.jiguang.api.utils.JCollectionAuth
import cn.jiguang.verifysdk.api.JVerificationInterface
import com.bytedance.applog.AppLog
import com.bytedance.applog.InitConfig
import com.bytedance.applog.util.UriConstants
import com.github.gzuliyujiang.oaid.DeviceID
import com.github.gzuliyujiang.oaid.DeviceIdentifier
import com.github.gzuliyujiang.oaid.OAIDLog
import com.gushenge.core.client
import com.gushenge.core.dao.MMKVConsts
import com.gushenge.core.requests.UserRequest
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
import com.kyzh.core.MyApplication
import com.kyzh.core.R
import com.kyzh.core.pager.weal.vip.VipCentreActivity
import com.kyzh.core.uis.alert
import com.kyzh.core.utils.Config
import com.kyzh.core.utils.getChannel
import com.shuyu.gsyvideoplayer.player.IjkPlayerManager
import com.shuyu.gsyvideoplayer.player.PlayerFactory
import com.tencent.bugly.crashreport.CrashReport
import com.tencent.tauth.Tencent
import com.umeng.commonsdk.UMConfigure
import com.umeng.socialize.PlatformConfig
import com.umeng.socialize.UMShareAPI
import com.umeng.socialize.UMShareConfig
import me.jessyan.autosize.AutoSizeConfig
import org.litepal.LitePal
import rxhttp.RxHttpPlugins
import java.util.*

fun Context.appInit(listener:Int.()->Unit){
    Log.e("TAG", "initApp: "+this.javaClass )
    getChannel("coid")
    val juliang =  InitConfig("420227", MMKVConsts.sub);
    juliang.setUriConfig(UriConstants.DEFAULT);
    juliang.isImeiEnable = false;//建议关停获取IMEI（出于合规考虑）
    juliang.isMacEnable = false;
    juliang.setEnablePlay(true);
    juliang.isAutoTrackEnabled = true; // 全埋点开关，true开启，false关闭
    juliang.isLogEnable = false; // true:开启日志，参考4.3节设置logger，false:关闭日志
    juliang.appName = resources.getString(R.string.app_name)
    AppLog.setEncryptAndCompress(true); // 加密开关，true开启，false关闭
    if(this is Application){
        // 注册oaid 获取方式
        DeviceIdentifier.register(this )
        AppLog.init(this, juliang);
    }else{
        // 注册oaid 获取方式
            this as Activity
        DeviceIdentifier.register(this.application)
        AppLog.init(this, juliang,this);
    }


    // 设置数据上送地址

    // 设置播放器使用内核   exo内核播放有问题
    PlayerFactory.setPlayManager(IjkPlayerManager::class.java)
    // 极光隐私合规
    JCollectionAuth.setAuth(this ,true);
    //极光初始化
    JVerificationInterface.init(this, 5000) { _, _ ->
    }
    //极光
    JVerificationInterface.setDebugMode(false);
    // 友盟初始化   客户更换友盟相关的时  记得在项目的app ->src  main->java->的路径名
    UMConfigure.init(this, "5c7e26653fc19501f3000c3c", "umeng", UMConfigure.DEVICE_TYPE_PHONE, "")
    // 初始化微信   在MyApplication的weixin 替换
    PlatformConfig.setWeixin(MyApplication.weixin, "382369e5082fd8371eca9fba3cc8cdb9")
    // 初始化QQ  MyApplication.qqzone  这个需要全局替换
    PlatformConfig.setQQZone(MyApplication.qqzone, "HQTJXilbS7XjgYDd")
    PlatformConfig.setQQFileProvider("${packageName}.fileprovider")
    PlatformConfig.setWXFileProvider("${packageName}.fileprovider")
    // 开启QQ分享登录用  QQ要求的
    Tencent.setIsPermissionGranted(true)
    // 友盟分享初始化
    UMShareAPI.init(this, "5c7e26653fc19501f3000c3c")
    // 友盟分享日志显示
    UMConfigure.setLogEnabled(true)
    val config  = UMShareConfig()
    // 设置三方登录
    config.isNeedAuthOnGetUserInfo(true)
    UMShareAPI.get(this).setShareConfig(config)
    // rxHttp 初始化   后期会更换  需要rebuild 才会生成对应类
    RxHttpPlugins.init(client )

    // 数据库
    LitePal.initialize(this )
    // 屏幕适配
    AutoSizeConfig.getInstance().setCustomFragment(true)
        .setExcludeFontScale(true).isBaseOnWidth = true
    // 一键登录预加载
    JVerificationInterface.preLogin(this,3000){
            a,b->
        Log.e("TAG", "[$a]message=$b");
    }
    // 语言设置
    MMKVConsts.language= Config.localLanguage


    OAIDLog.enable()
    if(MMKVConsts.oaid.isNullOrEmpty()){
        // 是否支持OAID/AAID
        if(DeviceID.supportedOAID(this)){
            // 获取OAID/AAID，同步调用
            MMKVConsts.oaid =  DeviceIdentifier.getOAID(this)
            Log.e("TAG", "initApp: 支持oaid"+MMKVConsts.oaid )
            listener(0)
        }else{
            listener(1)
            alert("设备权限使用说明", "用于识别设备，进行信息推送和安全保障等功能。我们申请您的设备权限，您可以选择同意或者拒绝",getString(R.string.agree), "拒绝",{

                if(!XXPermissions.isGranted(this, Permission.READ_PHONE_STATE)){
                    Log.e("TAG", "initApp: 不支持oaid 没权限" )
                    XXPermissions.with(this).permission(Permission.READ_PHONE_STATE).request(object :
                        OnPermissionCallback {
                        //同意
                        override fun onGranted(permissions: MutableList<String>?, all: Boolean) {
                            MMKVConsts.oaid = DeviceIdentifier.getIMEI(this@appInit)
                            if(MMKVConsts.oaid.isNullOrEmpty()){
                                Log.e("TAG", "initApp: 不支持oaid  GUID 同意"+MMKVConsts.oaid  )
                                MMKVConsts.oaid =  DeviceIdentifier.getGUID(this@appInit)
                            }
                            Log.e("TAG", "initApp: 不支持oaid 同意$all"+MMKVConsts.oaid  )
                            listener(2)
                        }
                        //拒绝
                        override fun onDenied(permissions: MutableList<String>?, never: Boolean) {
                            super.onDenied(permissions, never)
                            MMKVConsts.oaid =  DeviceIdentifier.getGUID(this@appInit)
                            Log.e("TAG", "initApp: 不支持oaid 拒绝"+MMKVConsts.oaid  )
                            listener(2)
                        }
                    })
                }else{
                    Log.e("TAG", "initApp: 不支持oaid 有权限" )
                    MMKVConsts.oaid = DeviceIdentifier.getIMEI(this)
                    if(MMKVConsts.oaid.isNullOrEmpty()){
                        MMKVConsts.oaid =  DeviceIdentifier.getGUID(this)
                        Log.e("TAG", "initApp: 不支持oaid  GUID 同意"+MMKVConsts.oaid  )
                    }
                    listener(2)
                    Log.e("TAG", "initApp: 不支持oaid 同意"+MMKVConsts.oaid  )
                }
            },{
                if(MMKVConsts.oaid.isNullOrEmpty()){
                    MMKVConsts.oaid =  DeviceIdentifier.getGUID(this)
                    Log.e("TAG", "initApp: 不支持oaid  GUID 同意"+MMKVConsts.oaid  )
                }
                listener(2)


            }) .setCancelable(false)



        }


    }
    //  先注释掉  没影响后删除
    //        val client = OkHttpClient.Builder()
//        client.addInterceptor(CustomLogInterceptor())
//        client.sslSocketFactory(MyApplication.instance.createSSLSocketFactory(), MyApplication.TrustAllCerts())
//        client.hostnameVerifier { hostname, session -> true }
    // 预留的  长按图标显示
    var shortcutManager: ShortcutManager? =   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
            getSystemService(ShortcutManager::class.java)
        } else {
            null
        }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
        //ShortcutInfo.Builder构建快捷方式
        val shortcut: ShortcutInfo = ShortcutInfo.Builder(this, "test_add")
            .setShortLabel("会员特权")
            .setIcon(Icon.createWithResource(this, R.drawable.icon_home_title3)) //设置快捷图标
            //跳转到百度网页
            //                       .setIntent(new Intent(Intent.ACTION_VIEW,
            //                       Uri.parse("https://www.baidu.com/")))
            //跳转的目标，定义Activity
            .setIntent(Intent(Intent.ACTION_MAIN, null, this, VipCentreActivity::class.java))
            .build()
        //setDynamicShortcuts()方法来设置快捷方式
        shortcutManager?.dynamicShortcuts = listOf(shortcut)
    }
    // 错误日志收集
    CrashReport.initCrashReport(applicationContext, "fce5b27f11", false);

    //动态更新长按图标
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
//            val intent2 = Intent()
//            intent2.action = "android.intent.action.MAIN"
//            intent2.setClassName(packageName, "$packageName.MainActivity.java")
//            /**
//             * 构建ShortcutInfo时指定相同的id，根据id去找到要更新的快捷方式
//             *
//             * 注意：唯一的id标识不可传入一个静态快捷方式的id
//             * 否则会抛出异常 应用会抛出错误：Manifest shortcut ID=XX may not be manipulated via APIs
//             */
//            val info = ShortcutInfo.Builder(this, "test_add")
//                .setIntent(intent2)
//                .setLongLabel("动态更新的长名")
//                .setShortLabel("动态更新的短名")
//                .build()
//            shortcutManager = getSystemService(ShortcutManager::class.java)
//            val dynamicShortcuts = shortcutManager.dynamicShortcuts
//
//            //updateShortcuts(List<ShortcutInfo> shortcutInfoList)方法更新现有的快捷方式
//            shortcutManager.updateShortcuts(Arrays.asList(info))
//        }

//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
////动态删除
//            /**
//             * removeDynamicShortcuts(List<String> shortcutIds)方法可以删除动态快捷方式
//             *
//             * 同理，在唯一标识id和动态更新处理一样，需传入动态快捷方式的id，要不然会报同样的错误
//             */
//            shortcutManager.removeDynamicShortcuts(Arrays.asList("test_add"));//唯一的id标识
//
//            Toast.makeText(MainActivity.this, "已移除", Toast.LENGTH_SHORT).show();
//        }
}